package org.example.domain.model.repository;

import org.example.domain.system.model.LoginUser;
import org.example.domain.system.model.UserAccount;
import org.example.domain.system.model.req.UserLoginReq;

import java.util.Map;

public interface LoginTypeStrategeRepository {
    /**
     * 登录校验
     *
     * @param userLoginReq
     */
    UserAccount loginVerify(UserLoginReq userLoginReq, UserAccount userAccount);

    /**
     * 创建Token
     *
     * @param loginUser
     * @return
     */
    Map<String, Object> authentication(LoginUser loginUser);

    /**
     * 获取用户信息
     *
     * @param request
     * @return
     */
    LoginUser getLoginUser(String token);

    /**
     * 刷新用户token有效期
     *
     * @param loginUser
     */
    void verifyLoginUserExpire(LoginUser loginUser);


    /**
     * 注销用户token
     *
     * @param token
     */
    void logoutByTokenCache(String token);

    /**
     * 查看用户token是否过期
     *
     * @param userTokenKey
     * @return
     */
    Boolean hasToken(String userTokenKey);
}
